package sys

import (
	"github.com/gofiber/fiber/v2"
	"github.com/mozillazg/go-pinyin"
	"go-web2/app/common/config"
	"go-web2/app/common/util"
	"go-web2/app/model/sys"
	"strings"
)

type DictController struct{}

// 字典类型列表
func (DictController) GetTypeList(c *fiber.Ctx) error {
	dict := sys.SysDict{}
	dict.DictName = c.Query("name")
	return c.Status(200).JSON(config.Success(dict.GetTypeList()))
}

// 字段项列表分页
func (DictController) GetPage(c *fiber.Ctx) error {
	dict := sys.SysDict{}
	dict.DictCode = c.Query("code")
	dict.DictName = c.Query("name")
	dict.ParentId = c.Query("parentId")
	pageSize := c.QueryInt("pageSize", 10)
	pageNum := c.QueryInt("pageNum", 1)
	return c.Status(200).JSON(config.Success(dict.GetPage(pageSize, pageNum)))
}

// 根据id获取字典
func (DictController) GetById(c *fiber.Ctx) error {
	dict := sys.SysDict{}
	dict.Id = c.Params("id")
	dict.GetById()
	return c.Status(200).JSON(config.Success(dict))
}

// 生成字典代码
func (DictController) CreateCode(c *fiber.Ctx) error {
	dictName := c.Query("dictName")
	p := pinyin.NewArgs()
	p.Style = pinyin.FirstLetter
	dictCode := util.ConvertToPinyin(dictName, p)
	return c.Status(200).JSON(config.Success(dictCode))
}

// 字典名称是否存在
func (DictController) HasByName(c *fiber.Ctx) error {
	dict := sys.SysDict{}
	dict.Id = c.Query("id")
	dict.DictName = c.Query("dictName")
	flag := dict.HasDictByNameAndCode()
	result := map[string]any{}
	result["isRepeat"] = flag
	if flag {
		dictName := dict.CreateNameOrCode()
		p := pinyin.NewArgs()
		p.Style = pinyin.FirstLetter
		dictCode := util.ConvertToPinyin(dictName, p)
		result["dictName"] = dictName
		result["dictCode"] = dictCode
	}
	return c.Status(200).JSON(config.Success(result))
}

// 字典代码是否存在
func (DictController) HasByCode(c *fiber.Ctx) error {
	dict := sys.SysDict{}
	dict.Id = c.Query("id")
	dict.DictCode = c.Query("dictCode")
	flag := dict.HasDictByNameAndCode()
	result := map[string]any{}
	result["isRepeat"] = flag
	if flag {
		dictCode := dict.CreateNameOrCode()
		result["dictCode"] = dictCode
	}
	return c.Status(200).JSON(config.Success(result))
}

// 新增字典
func (DictController) Insert(c *fiber.Ctx) error {
	dict := sys.SysDict{}
	if err := c.BodyParser(&dict); err != nil {
		return c.Status(200).JSON(config.Error(err.Error()))
	}
	err := dict.Insert()
	if err != nil {
		return c.Status(200).JSON(config.Error(err.Error()))
	}
	return c.Status(200).JSON(config.Success(nil))
}

// 修改字典
func (DictController) Update(c *fiber.Ctx) error {
	dict := sys.SysDict{}
	if err := c.BodyParser(&dict); err != nil {
		return c.Status(200).JSON(config.Error(err.Error()))
	}
	err := dict.Update()
	if err != nil {
		return c.Status(200).JSON(config.Error(err.Error()))
	}
	return c.Status(200).JSON(config.Success(nil))
}

// 删除字典类型
func (DictController) DeleteType(c *fiber.Ctx) error {
	dict := sys.SysDict{}
	dict.Id = c.Params("id")
	if err := dict.DeleteType(); err != nil {
		return c.Status(200).JSON(config.Error(err.Error()))
	}
	return c.Status(200).JSON(config.Success(nil))
}

// 删除字典
func (DictController) Delete(c *fiber.Ctx) error {
	dict := sys.SysDict{}
	if err := c.BodyParser(&dict); err != nil {
		return c.Status(200).JSON(config.Error(err.Error()))
	}
	ids := strings.Split(dict.Id, ",")
	if err := dict.Delete(ids); err != nil {
		return c.Status(200).JSON(config.Error(err.Error()))
	}
	return c.Status(200).JSON(config.Success(nil))
}

// 根据字典类型代码获取字典项列表
func (DictController) GetByTypeCode(c *fiber.Ctx) error {
	dict := sys.SysDict{}
	dict.DictCode = c.Query("dictCode")
	return c.Status(200).JSON(config.Success(dict.GetSelectList()))
}
